package com.maiko.maikoaiagent.tools;

import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbacks;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ToolRegistration 是一个 Spring 配置类，
 * 用于统一注册所有自定义的工具类 Bean，
 * 并通过 ToolCallback 数组暴露给 AI Agent 框架使用。
 *
 * 其中，webSearchTool 依赖外部配置的 API Key，通过 @Value 注入。
 *
 * 注册的工具包括：
 * - 文件操作工具
 * - 网络搜索工具
 * - 网页爬取工具
 * - 资源下载工具
 * - 终端命令执行工具
 * - PDF 生成工具
 *
 * 这样做方便框架自动发现和调用这些工具的能力。
 *
 * @author Maiko7
 * @create 2025-07-09 15:27
 */
@Configuration
public class ToolRegistration {

    /**
     * 从配置文件中读取 Search API 的密钥
     */
    @Value("${search-api.api-key}")
    private String searchApiKey;

    /**
     * 创建并注册所有工具 Bean，供 AI Agent 框架调用。
     *
     * @return 包含所有工具的 ToolCallback 数组
     */
    @Bean
    public ToolCallback[] allTools() {
        FileOperationTool fileOperationTool = new FileOperationTool();   // 文件操作工具
        WebSearchTool webSearchTool = new WebSearchTool(searchApiKey);      // 网络搜索工具
        WebScrapingTool webScrapingTool = new WebScrapingTool();    // 网页爬取工具
        ResourceDownloadTool resourceDownloadTool = new ResourceDownloadTool(); // 资源下载工具
        TerminalOperationTool terminalOperationTool = new TerminalOperationTool(); // 终端命令执行工具
        PDFGenerationTool pdfGenerationTool = new PDFGenerationTool(); // PDF 生成工具
        TerminateTool terminateTool = new TerminateTool();  // 终止工具

        return ToolCallbacks.from(
                fileOperationTool,
                webSearchTool,
                webScrapingTool,
                resourceDownloadTool,
                terminalOperationTool,
                pdfGenerationTool,
                terminateTool
        );
    }
}

